﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using TP2.Lib;

namespace TP2.Lib
{
     [Serializable]
    public class HelicopteroPolicia : VehiculoAereo
    {
        const int VIDA_MAX_HELICOPTEROPOLICIA = 50,
                  VIDA_HELICOPTEROPOLICIA = 50,
                  RAPIDEZ_HELICOPTEROPOLICIA = 2,
                  RADIO_HELICOPTEROPOLICIA = 32,
                  PTOS_X_DESTRUC_HELICOPTEROPOLICIA = -200;

        private HelicopteroPolicia() { } /*Contructor vacio, lo utiliza la serialización*/

        public HelicopteroPolicia(double radioDeGiro, int[] dimensiones) : base(null, dimensiones)
        {
            this.Posicion = new double[3] { (dimensiones[0] - this.Radio), (dimensiones[1] / 2), 0 };
            /*
            this.Posicion[0] = (dimensiones[0] - this.Radio);
            this.Posicion[1] = dimensiones[1] / 2;
            this.Posicion[3] = 0;
             */
            this.VidaMaxima = VIDA_MAX_HELICOPTEROPOLICIA;
            this.Vida = VIDA_HELICOPTEROPOLICIA;
            this.Rapidez = RAPIDEZ_HELICOPTEROPOLICIA;
            this.Radio = RADIO_HELICOPTEROPOLICIA;
            this.PuntosPorDestruccion = PTOS_X_DESTRUC_HELICOPTEROPOLICIA;
            this.Recorrido = new MovimientoCircular(dimensiones, radioDeGiro, this);
        }
        
        /*Metodos abstractos heredados: obligados a definirlos*/

        public override void AgregateALista(List<ElementoJuego> lista1, List<ElementoJuego> lista2)
        {
            lista2.Add(this);
        }

        public override Proyectil Actuar()
        {
            this.Mover();
            return null;
        }

        public override void Impactar(ElementoJuego impactante)
        {
            impactante.ImpactarConHelicopteroPolicia();
        }

        public override void ImpactarConArma(Arma impactante)
        {
            //Supongo que estos elementos no se impactan.
        }

        public override bool ImpactarConProyectil(Proyectil impactante)
        {
            this.ModificarVida(impactante.Danio);
            return (this.EstoyVivo());
        }

        public override void ImpactarConAvionCivil()
        {
            //Supongo que estos elementos no se impactan.
        }

        public override void ImpactarConAvionEnemigo()
        {
            //Supongo que estos elementos no se impactan.
        }

        public override void ImpactarConAvionJugador()
        {
            this.ModificarVida(this.Vida);
        }

        public override void ImpactarConHelicopteroPolicia()
        {
            //Supongo que estos elementos no se impactan.
        }

        public override void ImpactarConTanqueEnergia(TanqueEnergia impactante)
        {
            //Supongo que estos elementos no se impactan.
        }

        #region /*------------- metodos privados -------------------*/

        private void Mover()
        {
            double[] posicion = new double[3];
            posicion = this.Recorrido.GetSiguientePunto(this.Posicion);
            this.Posicion = posicion;
        }

        #endregion

    }
}
